#include "RegistroAuxiliar.h"

RegistroAuxiliar::RegistroAuxiliar() {
    posiciones.clear();
}

void RegistroAuxiliar::setTermino(string termino) {
	this->termino = termino;
}

unsigned int RegistroAuxiliar::getNroTermino() const{
    return this->nroTermino;
}

void RegistroAuxiliar::setNroTermino(unsigned int nroTermino) {
    this->nroTermino = nroTermino;
}

string RegistroAuxiliar::getTermino() const {
	return this->termino;
}

bool RegistroAuxiliar::operator<(const RegistroAuxiliar &reg) const {
    return (this->termino < reg.termino);
}

void RegistroAuxiliar::agregarDocumento(uint32_t nroDoc){

    DocumentoPosiciones documentosPosiciones;
    documentosPosiciones.setDocumento(nroDoc);
    posiciones.push_back(documentosPosiciones);
    sort(posiciones.begin(),posiciones.end());

}

void RegistroAuxiliar::agregarPosicion(uint32_t nroDoc, uint32_t posicion) {

    unsigned int i=0;
    while(i<posiciones.size() && posiciones.at(i).getDocumento()<=nroDoc){
        if(posiciones.at(i).getDocumento()==nroDoc){
            posiciones.at(i).addPosicion(posicion);
        }
        i++;
    }
}

vector<uint32_t>* RegistroAuxiliar::getDocumentos() {
    vector<uint32_t>* vec = new vector<uint32_t>;

    for (unsigned int i = 0; i < this->posiciones.size(); i++) {
        vec->push_back(this->posiciones.at(i).getDocumento());
    }

    return vec;
}


bool RegistroAuxiliar::existDocument(unsigned int document) {

    bool found=false;
    unsigned int i=0;

    while(i<posiciones.size() && !found){
        if(this->posiciones.at(i).getDocumento()==document)
            found=true;
        i++;
    }
    return found;
}



vector<uint32_t> RegistroAuxiliar::getPosiciones(uint32_t nroDoc) {

    unsigned int i=0;
    vector<uint32_t> vec;
    while(i<posiciones.size() && posiciones.at(i).getDocumento()<=nroDoc){
        if(((DocumentoPosiciones)(posiciones.at(i))).getDocumento()==nroDoc){
            vec=((DocumentoPosiciones) posiciones.at(i)).getPosiciones();
        }
        i++;
    }

    //sort(vec.begin(), vec.end());
    return vec;
}

RegistroAuxiliar::~RegistroAuxiliar() {
    posiciones.clear();
}
